/*
283. 移动零
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

请注意 ，必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:

输入: nums = [0]
输出: [0]


提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1


进阶：你能尽量减少完成的操作次数吗？
*/
package main

import "fmt"

func main(){
	nums := []int{0,1,0,3,12}
	moveZeroes(nums)
	fmt.Println(nums)
}

// func moveZeroes(nums []int)  {
// 	zeroPointer := 0
// 	for zeroPointer < len(nums){
// 		if nums[zeroPointer] == 0{
// 			noZeroPointer := zeroPointer + 1
// 			for (noZeroPointer < len(nums)){
// 				if nums[noZeroPointer] !=0{
// 					nums[zeroPointer], nums[noZeroPointer] = nums[noZeroPointer], nums[zeroPointer]
// 					break
// 				}
// 				noZeroPointer ++
// 			}
// 		}
// 		zeroPointer ++
// 	}
// }

func moveZeroes(nums []int) {
	j := 0 

	for i :=0; i < len(nums); i ++ {
		if nums[i] != 0{
			nums[j] = nums[i]
			j ++
		}
	}
	for i := j; i < len(nums); i ++{
		nums[i] = 0
	}
}